﻿
using System;
using System.Collections.Generic;
using DataMongo.Entities;
using Google.GData.Contacts;
using Google.GData.Extensions;



namespace MVCMongo.Filters
{
    public class GoogleContactService
    {
        public static ContactsService GContactService = null;

        public static void InitializeService(string username,
            string password)
        {
            GContactService = new ContactsService("Contact Infomation");
            GContactService.setUserCredentials(username, password);
        }

        public static List<ContactDetail> GetAllContact()
        {
            List<ContactDetail> contactDetails = new List<ContactDetail>();
            ContactsQuery query = new ContactsQuery(ContactsQuery.
                CreateContactsUri("default"));

            ContactsFeed feed = GContactService.Query(query);
            foreach (ContactEntry entry in feed.Entries)
            {
                ContactDetail contact = new
                    ContactDetail
                {
                    Name = entry.Title.Text,
                    EmailAddress1 = entry.Emails.Count >= 1 ? entry.Emails[0].Address : "",
                    EmailAddress2 = entry.Emails.Count >= 2 ? entry.Emails[1].Address : "",
                    Phone = entry.Phonenumbers.Count >= 1 ? entry.Phonenumbers[0].Value : "",
                    //Address = entry.PostalAddresses.Count >= 1 ? entry.PostalAddresses[0].Value : "",
                    Details = entry.Content.Content
                };

                contactDetails.Add(contact);
            }

            return contactDetails;
        }

        public static void AddContact(ContactDetail contact)
        {
            ContactEntry newEntry = new ContactEntry();
            newEntry.Title.Text = contact.Name;

            EMail primaryEmail = new EMail(contact.EmailAddress1);
            primaryEmail.Primary = true;
            primaryEmail.Rel = ContactsRelationships.IsWork;
            newEntry.Emails.Add(primaryEmail);

            EMail secondaryEmail = new EMail(contact.EmailAddress2);
            secondaryEmail.Rel = ContactsRelationships.IsHome;
            newEntry.Emails.Add(secondaryEmail);

            PhoneNumber phoneNumber = new PhoneNumber(contact.Phone);
            phoneNumber.Primary = true;
            phoneNumber.Rel = ContactsRelationships.IsMobile;
            newEntry.Phonenumbers.Add(phoneNumber);

            PostalAddress postalAddress = new PostalAddress();
            postalAddress.Value = contact.Address;
            postalAddress.Primary = true;
            postalAddress.Rel = ContactsRelationships.IsHome;
           // newEntry.PostalAddresses.Add(postalAddress);

            newEntry.Content.Content = contact.Details;

            Uri feedUri = new Uri(ContactsQuery.CreateContactsUri("default"));

            ContactEntry createdEntry = (ContactEntry) GContactService.Insert(feedUri, newEntry);
        }
    }
}

